#include <stdio.h>
#include <string.h>

char s[10];
int vis[10];  // bool vis[i] i inputs:abcde
int len;
char temp[10] = "";
char ans[1000][10];
int ansNum = 0;

int check(char* a) {
    for (int i = 0; i < ansNum; i++) {
        int isSame = 1;
        for (int j = 0; j < len; j++) {
            if (ans[i][j] != a[j]) {
                isSame = 0;
                break;
            }
        }
        if (isSame == 1)
            return 0;
    }
    return 1;
}

void A(int ind, char* t) {  // ind：当前正在穷举排列的第ind项，t：存放当前的排列
    if (ind == len) {
        // printf("%s\n", t);
        if (check(t)) {  // 判断这个排列是否曾经得到过，如果第一次得到这个排列，则加进答案里
            for (int i = 0; i < len; i++) ans[ansNum][i] = t[i];
            ansNum++;
        }
        return;
    } else {
        for (int i = 0; i < len; i++) {
            if (vis[i])  // 判断第i个位置的字符是否已经参与到这个排列
                continue;
            t[ind] = s[i];
            vis[i] = 1;  // 将这个字符增添进来，标记为已参与
            A(ind + 1, t);
            vis[i] = 0;  // 递归后，还原标记为未参与
        }
    }
    return;
}

int main() {
    scanf("%s", s);
    len = strlen(s);
    for (int i = 0; i < len - 1; i++) {  // 将输入的字符串排序
        for (int j = 0; j < len - i - 1; j++) {
            if (s[j + 1] < s[j]) {
                char c = s[j + 1];
                s[j + 1] = s[j];
                s[j] = c;
            }
        }
    }
    A(0, temp);
    for (int i = 0; i < ansNum; i++) printf("%s\n", ans[i]);
}